package com.engine.cn.leetcode.string;

import java.util.Arrays;

/**
 * 编写一个函数，其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
 * 不要给另外的数组分配额外的空间，你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
 * 示例 1：
 * 输入：s = ["h","e","l","l","o"]
 * 输出：["o","l","l","e","h"]
 * 双指针法-两头移动，最后相遇，相同步数的替换
 */
public class ReverseString {
    public static void reverse(char[] str) {
        if (str == null || str.length == 0) {
            return;
        }

        //使用双指针的方式，注意思考中间的条件，最后两个指针会相遇，或中间只剩最后一个
        for (int left = 0, right = str.length - 1; left < right; left++, right--) {
            swap(str, left, right);
        }
    }

    static void swap(char[] str, int left, int right) {
        char temp = str[right];
        str[right] = str[left];
        str[left] = temp;
    }

    public static void main(String[] args) {
        char[] str = {'1', '2', '3', '4', '5'};
        reverse(str);
        System.out.println("str==>" + Arrays.toString(str));
    }
}
